package br.uniriotec.pssgbd.unterhaltung.model.bo;

import java.sql.SQLException;
import java.util.List;

import br.uniriotec.pssgbd.unterhaltung.model.dao.EstabelecimentoDAO;
import br.uniriotec.pssgbd.unterhaltung.model.entidade.Pais;
import br.uniriotec.pssgbd.unterhaltung.model.entidade.relacionadaEstabelecimento.Bairro;
import br.uniriotec.pssgbd.unterhaltung.model.entidade.relacionadaEstabelecimento.Cidade;
import br.uniriotec.pssgbd.unterhaltung.model.entidade.relacionadaEstabelecimento.Estabelecimento;

public class EstabelecimentoBO extends BaseBO<Estabelecimento>{
	private static EstabelecimentoBO instancia;
	private static EstabelecimentoDAO estabelecimentoDAO;

	public static EstabelecimentoBO getInstance() {
		if (instancia == null) {
			instancia = new EstabelecimentoBO();
			estabelecimentoDAO = new EstabelecimentoDAO();
		}
		return instancia;
	}

	public List<Cidade> listarCidade() throws Exception {
		return CidadeBO.getInstance().listarCidade();
	}
	
	public List<Bairro> listarBairro() throws Exception {
		return BairroBO.getInstance().listarBairro();
	}

	public List<Estabelecimento> consultar(String codBairro, String codCidade, String prato,
		String faixaPrecoPrato, String tipoBebida, String faixaPrecoBebida) throws Exception {
		String sqlWhere = "WHERE 1 = 1 ";

		if (Integer.parseInt(codBairro) != -1) {
			sqlWhere = sqlWhere + "AND cod_bairro = " + Integer.parseInt(codBairro) + " ";
		}
		if (Integer.parseInt(codCidade) != -1) {
			sqlWhere = sqlWhere + "AND cod_cidade = " + Integer.parseInt(codCidade) + " ";
		}
		if (prato.equalsIgnoreCase("") == false) {
			sqlWhere = sqlWhere + "AND prato = LIKE '%" + prato	+ "%' ";
		}
		if (Integer.parseInt(faixaPrecoPrato) != -1) {
			int aux = Integer.parseInt(faixaPrecoPrato);
			String auxiliar =  recuperaSqlWhereComida (aux);
			sqlWhere = sqlWhere + auxiliar;
		}
		if (Integer.parseInt(tipoBebida) != -1) {
			sqlWhere = sqlWhere + "AND cod_tipo = " + Integer.parseInt(tipoBebida)+ " ";
		}		
		if (Integer.parseInt(faixaPrecoBebida) != -1) {
			int aux = Integer.parseInt(faixaPrecoBebida);
			String auxiliar =  recuperaSqlWhereBebida (aux);
			sqlWhere = sqlWhere + auxiliar;
		}
		
		return estabelecimentoDAO.obterEstabelecimentos(sqlWhere);
	}

	public static Estabelecimento recuperaEstabelecimento(int id) throws ClassNotFoundException,
			SQLException {
		String sqlWhere = "Where id_rotulo = " + id;
		return estabelecimentoDAO.obterEstabelecimento(id);
	}

	private String recuperaSqlWhereComida (int aux){
		String sqlWhere = null;
		
		switch (aux){
		case 1 :
			    sqlWhere =  "AND preco_prato < 20" ;
			    break;
		case 2 :sqlWhere =  "AND preco_prato BETWEEN 20  and 40";
		        break;
		case 3 :
			    sqlWhere =  "AND preco_prato BETWEEN 41  and 60";
                break;
		case 4 :sqlWhere =  "AND preco_prato > 60";
                break;        
		}
		return sqlWhere;
	}
	
	private String recuperaSqlWhereBebida (int aux){
		String sqlWhere = null;
		
		switch (aux){
		case 1 :
			    sqlWhere =  "AND preco_prato < 10" ;
			    break;
		case 2 :sqlWhere =  "AND preco_prato BETWEEN 10  and 20";
		        break;
		case 3 :
			    sqlWhere =  "AND preco_prato BETWEEN 21  and 30";
                break;
		case 4 :sqlWhere =  "AND preco_prato > 30";
                break;        
		}
		return sqlWhere;
	}
	
	@Override
    public List<Estabelecimento> listar() throws Exception {
            return estabelecimentoDAO.obterEstabelecimentos();
    }

    @Override
    public void incluir(Estabelecimento t) throws Exception {
            // TODO Auto-generated method stub
            
    }

    @Override
    public void alterar(Estabelecimento t) throws Exception {
            // TODO Auto-generated method stub
            
    }

    @Override
    public void excluir(Estabelecimento t) throws Exception {
            // TODO Auto-generated method stub
            
    }

}
